/*
使用软定时器原理的“多任务”系统，轮询调用入口，非RTOS。
“任务”在main里面被调用执行,不在中断中执行，可以执行耗时任务，但是会影响其他“任务”的响应及时性。

*/
#include "polsys.h"
#include "hard_wired.h"
#include "app.h"


// 用于指示本软件已经存在FLASH中的标志数据，不可以修改地址和值，否则BootLoader无法识别将不会跳转到本软件。
volatile const u32 mAppFlag __attribute__((section(".ARM.__at_0x00002A00"))) = 0XAA55A5A5;
// 预留存放固件长度的地方。
volatile const u32 mAppLen __attribute__((section(".ARM.__at_0x00002A04"))) = 0;


// 静态定义任务对象
static idata polsys_task_t mTask_LEDRun;
static idata polsys_task_t mTask_DoSome;
static idata polsys_task_t mTask_KEYScan;

void LED_Run()		//间隔100ms执行一次
{
	LED = !LED;
}

void DoSome()
{
	//不断要处理的事情
}

void KEY_Scan()
{
	//间隔10ms执行一次
}


// 以下事件函数看起来像中断，但是都在主程序态执行，可以执行耗时操作，但可能会拖慢整个软件的运行速度。

// 软件启动事件。软件启动执行一次，函数名由 polsys 确定，不可任意修改。（看成是中断服务函数）
void App_Load()
{
	Led_Init();
	Polsys_TaskInit(&mTask_LEDRun,LED_Run,100);	//初始化任务 mTask_LEDRun ， 入口为 LED_Run ，间隔100ms执行一次
	Polsys_TaskInit(&mTask_DoSome,DoSome,0);	//不断循环执行
	Polsys_TaskInit(&mTask_KEYScan,KEY_Scan,10);	//间隔10ms执行一次

}






